/**
 * 路由守卫工具
 * 用于检查用户登录状态，控制页面访问权限
 */

import { isLogin, validateToken } from '@/utils/auth.js'

/**
 * 检查页面访问权限
 * @param {string} pagePath - 页面路径
 * @returns {Promise<boolean>} 是否允许访问
 */
export const checkPageAccess = async (pagePath) => {
  // 定义需要登录才能访问的页面
  const protectedPages = [
    '/pages/user/profile',
    '/pages/user/address/list',
    '/pages/user/address/edit',
    '/gallery_pages/comment/list',
    '/gallery_pages/comment/edit',
    '/service_pages/member/index'
  ]

  // 如果是受保护的页面，检查登录状态
  if (protectedPages.includes(pagePath)) {
    // 检查是否已登录
    if (!isLogin()) {
      return false
    }

    // 验证token是否仍然有效
    const token = uni.getStorageSync('token')
    if (token && !(await validateToken(token))) {
      return false
    }

    return true
  }

  // 非受保护页面允许访问
  return true
}

/**
 * 路由前置守卫
 * @param {string} to - 目标页面路径
 * @param {string} from - 来源页面路径
 * @returns {Promise<Object>} 导航结果
 */
export const beforeEach = async (to, from) => {
  // 检查页面访问权限
  const canAccess = await checkPageAccess(to)
  
  if (!canAccess) {
    // 无权限访问，重定向到登录页面
    return {
      path: '/pages/login/index',
      replace: true
    }
  }

  // 允许访问
  return true
}

/**
 * 检查并处理未授权访问
 * @param {Object} error - 错误对象
 * @returns {boolean} 是否已处理
 */
export const handleUnauthorizedAccess = (error) => {
  // 检查是否为401未授权错误
  if (error.statusCode === 401 || (error.message && error.message.includes('未授权'))) {
    // 清除本地存储的用户信息和token
    uni.removeStorageSync('userInfo')
    uni.removeStorageSync('token')
    
    // 显示提示信息
    uni.showToast({
      title: '登录已过期，请重新登录',
      icon: 'none'
    })
    
    // 跳转到登录页面
    uni.navigateTo({
      url: '/pages/login/index'
    })
    
    return true
  }
  
  return false
}

export default {
  checkPageAccess,
  beforeEach,
  handleUnauthorizedAccess
}